package fr.jhaccoun.demenager_eco.produit;

import java.math.BigDecimal;

import javax.sql.DataSource;

import org.junit.After;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.test.jdbc.JdbcTestUtils;

import com.github.springtestdbunit.MyDbUnitRule;
import com.github.springtestdbunit.annotation.DatabaseSetup;

import fr.jhaccoun.demenager_eco.utilisateur.Utilisateur;
 
@ContextConfiguration(locations = { "classpath:applicationContextTest.xml" })
@RunWith(SpringJUnit4ClassRunner.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
 public class ITProduitServiceImpl {
 
	@Autowired
	private ProduitService produitService;
  
	@Rule
	public MyDbUnitRule dbUnit = new MyDbUnitRule();
   
	@Autowired
	private DataSource dataSource;
	
	
	@After
	public void cleanData(){ 
		Resource scriptResetData = new FileSystemResource("src/main/resources/sql/reset_data.sql");
		JdbcTemplate jdbc = new JdbcTemplate(dataSource);  
		JdbcTestUtils.executeSqlScript(jdbc, scriptResetData, false); 
	}
	
 
	@Test 
	@DatabaseSetup({"classpath:data/insert_produit_categorie.xml","classpath:data/insert_produit_etat_usure.xml","classpath:data/insert_utilisateurs.xml"}) 
	public void testAddProduit_NouveauProduit_Cas_OK()   {
  
		EtatUsure etatUsure = new EtatUsure();
		etatUsure.setCode("BON");
		etatUsure.setId(0L);
		
		Categorie cat = new Categorie();
		cat.setCode("VIDEO");
		cat.setId(0L);
		
		Utilisateur user = new Utilisateur();
		user.setEmail("user1@gmail.com");
		user.setId(0L);
		
		Produit p = new Produit();
		p.setDescription("congelateur derniere game avec retro eclairage puis ecran lumineux");
		p.setIntitule("congelateur UHV 157894 PC");
		p.setGaranti(true);
		p.setFacture(false);
		p.setMarque("BRANDT");
		p.setPoids(76);
		p.setReference("53453");
		p.setPrixVente(new BigDecimal(125.54));
		p.setTaille(new Taille(50,60,120));
		p.setCategorie(cat);
		p.setEtatUsure(etatUsure);
		p.setUtilisateur(user);
		
		produitService.addProduit(p);
		
		Produit produitRetreived = produitService.findById(p.getId());
		
		Assert.assertEquals(p.getIntitule(),produitRetreived.getIntitule());
		Assert.assertEquals(p.getDescription(),produitRetreived.getDescription());
		Assert.assertEquals(p.getMarque(),produitRetreived.getMarque());
		Assert.assertEquals(p.getReference(),produitRetreived.getReference());
		Assert.assertEquals(p.getCategorie(),produitRetreived.getCategorie());
		Assert.assertEquals(p.getEtatUsure(),produitRetreived.getEtatUsure());
		Assert.assertEquals(p.getFacture(),produitRetreived.getFacture());
		Assert.assertEquals(p.getGaranti(),produitRetreived.getGaranti());
		Assert.assertEquals(p.getPoids(),produitRetreived.getPoids());
		Assert.assertEquals(p.getPrixVente(),produitRetreived.getPrixVente());
		Assert.assertEquals(p.getTaille(),produitRetreived.getTaille());
		Assert.assertEquals(p.getUtilisateur(),produitRetreived.getUtilisateur()); 
	}
	 
	@Test 
	@DatabaseSetup({"classpath:data/insert_produit_categorie.xml","classpath:data/insert_produit_etat_usure.xml","classpath:data/insert_utilisateurs.xml","classpath:data/insert_produits.xml"}) 
	public void testAddProduit_FindById_Cas_OK()   {
		Produit p = produitService.findById(0L);
		
		Assert.assertNotNull(p);
		
		//TODO continuer les assertions
 	}
	
 
}
